/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ch.hslu.dmg.model;

import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author zaoln
 */
@Entity
@Table(name = "Teil")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Teil.findAll", query = "SELECT t FROM Teil t"),
    @NamedQuery(name = "Teil.findByTeilid", query = "SELECT t FROM Teil t WHERE t.teilid = :teilid"),
    @NamedQuery(name = "Teil.findByBezeichnung", query = "SELECT t FROM Teil t WHERE t.bezeichnung = :bezeichnung"),
    @NamedQuery(name = "Teil.findByPreis", query = "SELECT t FROM Teil t WHERE t.preis = :preis"),
    @NamedQuery(name = "Teil.findByGroesse", query = "SELECT t FROM Teil t WHERE t.groesse = :groesse")})
public class Teil implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Teil_id")
    private Long teilid;
    @Column(name = "Bezeichnung")
    private String bezeichnung;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "Preis")
    private Double preis;
    @Column(name = "Groesse")
    private Integer groesse;
    @JoinTable(name = "BestehtAus", joinColumns = {
        @JoinColumn(name = "Oberteil_id", referencedColumnName = "Teil_id")}, inverseJoinColumns = {
        @JoinColumn(name = "Unterteil_id", referencedColumnName = "Teil_id")})
    @ManyToMany
    private List<Teil> teilList;
    @ManyToMany(mappedBy = "teilList")
    private List<Teil> teilList1;
    @OneToMany(mappedBy = "teilid")
    private List<Bestellung> bestellungList;
    @JoinColumn(name = "Lieferant_id", referencedColumnName = "Lieferanten_id")
    @ManyToOne
    private Lieferant lieferantid;
    @JoinColumn(name = "Fertigung_id", referencedColumnName = "Id")
    @ManyToOne
    private Fertigung fertigungid;

    public Teil() {
    }

    public Teil(Long teilid) {
        this.teilid = teilid;
    }

    public Long getTeilid() {
        return teilid;
    }

    public void setTeilid(Long teilid) {
        this.teilid = teilid;
    }

    public String getBezeichnung() {
        return bezeichnung;
    }

    public void setBezeichnung(String bezeichnung) {
        this.bezeichnung = bezeichnung;
    }

    public Double getPreis() {
        return preis;
    }

    public void setPreis(Double preis) {
        this.preis = preis;
    }

    public Integer getGroesse() {
        return groesse;
    }

    public void setGroesse(Integer groesse) {
        this.groesse = groesse;
    }

    @XmlTransient
    public List<Teil> getTeilList() {
        return teilList;
    }

    public void setTeilList(List<Teil> teilList) {
        this.teilList = teilList;
    }

    @XmlTransient
    public List<Teil> getTeilList1() {
        return teilList1;
    }

    public void setTeilList1(List<Teil> teilList1) {
        this.teilList1 = teilList1;
    }

    @XmlTransient
    public List<Bestellung> getBestellungList() {
        return bestellungList;
    }

    public void setBestellungList(List<Bestellung> bestellungList) {
        this.bestellungList = bestellungList;
    }

    public Lieferant getLieferantid() {
        return lieferantid;
    }

    public void setLieferantid(Lieferant lieferantid) {
        this.lieferantid = lieferantid;
    }

    public Fertigung getFertigungid() {
        return fertigungid;
    }

    public void setFertigungid(Fertigung fertigungid) {
        this.fertigungid = fertigungid;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (teilid != null ? teilid.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Teil)) {
            return false;
        }
        Teil other = (Teil) object;
        if ((this.teilid == null && other.teilid != null) || (this.teilid != null && !this.teilid.equals(other.teilid))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return this.getBezeichnung();
    }
    
}
